class Task048 : TaskBase
{
  override public Solve() : string
  {
    def modulus = 10000000000;
    def modPow(n, p)
    {
      | (_, 0L) => 1L
      | _ => n * modPow(n, p - 1) % modulus
    }
    def modPowSum(acc, n)
    {
      | (_, 1001L) => acc
      | _ => modPowSum((acc + modPow(n, n)) % modulus, n + 1L)
    }
    modPowSum(0L, 1L).ToString()
  }
}
